package com.zm.oes.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zm.oes.entity.Message;
import org.apache.ibatis.annotations.*;

/**
 * 留言信息Mapper层
 */
@Mapper
public interface MessageMapper {

    /**
     * 使用 @Select 注解标记，表示这是一个查询操作
     * 查询所有留言信息，并按照ID降序排序
     * 使用 @Results 注解配置关联查询，通过 ReplayMapper 查询每条留言的回复信息
     * 方法的参数为分页对象 Page，返回类型为留言信息的分页列表
     */
    @Select("select id,id as temp_id,title,content,time from message order by id desc")
    @Results({
            @Result(property = "replays", column = "temp_id",many = @Many(select = "com.rabbiter.oes.mapper.ReplayMapper.findAllById"))
    })
    IPage<Message> findAll(Page page);

    /**
     * 使用 @Select 注解标记，表示这是一个查询操作
     * 根据留言ID 查询指定的留言信息
     * 使用 @Results 注解配置关联查询，通过 ReplayMapper 查询该留言的回复信息
     * 方法的参数为留言ID，返回类型为留言信息
     */
    @Select("select id,title,content,time from message where id = #{id}")
    @Results({
            @Result(property = "replays", column = "id",many = @Many(select = "com.rabbiter.oes.mapper.ReplayMapper.findAllById"))
    })
    Message findById(Integer id);

    /**
     * 使用 @Delete 注解标记，表示这是一个删除操作
     * 根据留言ID 删除对应的留言信息
     * 方法的参数为留言ID，返回类型为操作结果的整数
     */
    @Delete("delete from message where id = #{id}")
    int delete(Integer id);

    /**
     * 使用 @Update 注解标记，表示这是一个更新操作
     * 根据留言ID 更新对应的留言信息
     * 方法的参数为一个 Message 对象，包含了待更新的留言信息
     * 返回类型为操作结果的整数
     */
    @Update("update message set title = #{title}, content = #{content}, time = #{time} where " +
            "id = #{id}")
    int update(Message message);

    /**
     * 使用 @Insert 注解标记，表示这是一个插入操作
     * 向留言表中插入一条新的留言信息
     * 方法的参数为一个 Message 对象，包含了待插入的留言信息
     * 使用 @Options 注解配置生成的主键属性，使其能够返回插入记录的ID
     * 返回类型为操作结果的整数
     */
    @Options(useGeneratedKeys = true,keyProperty = "id")
    @Insert("insert into message(title, content, time) values(#{title},#{content},#{time})")
    int add(Message message);
}
